package com.jdk.demo.fileChannel.partWrite;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

// write(ByteBuffer[] srcs, int offset, int length)方法的作用是以指定缓冲区数组的offset下标开始，向后使用length个字节缓冲区，再将每个缓冲区的remaining剩余字节子序列写入此通道的当前位置
// 1、offset：第一个缓冲区在缓冲区数组中的偏移量，必须为非负数并且不能大于srcs.length
// 2、length：要访问的最大缓冲区数，必须为非负数并且不能大于srcs.length-offset
// 3、具有同步性
public class Test5_1 {

	// 验证write方法是从通道当前位置开始写入；将ByteBuffer的remaining写入通道
	public static void main(String[] args) throws Exception {
		FileOutputStream fosRef = new FileOutputStream(new File("e.txt"));
		FileChannel fileChannel = fosRef.getChannel();
		
		ByteBuffer bytebuffer1 = ByteBuffer.wrap("abcde".getBytes());
		ByteBuffer bytebuffer2 = ByteBuffer.wrap("12345".getBytes());
		bytebuffer2.position(1);
		bytebuffer2.limit(3);
		ByteBuffer bytebuffer3 = ByteBuffer.wrap("d1e1f1".getBytes());
		bytebuffer3.position(2);
		bytebuffer3.limit(4);
		
		ByteBuffer[] bufferArray = new ByteBuffer[]{bytebuffer1, bytebuffer2, bytebuffer3};
		fileChannel.write(bufferArray, 1, 2);
		
		// 写入"23e1"
		fileChannel.close();
		fosRef.close();
	}
	
}
